/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package consultorio;
import Conexion.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
/**
 *
 * @author Unknown
 */
public class Medicos {

    conexion con;
    public  static String RUT_MEDICO   = LoginMedico.txtusuario.getText();
    
    public Medicos() {
        con = new conexion();
    }
    
                                         /*METODO LOGIN MEDICO*/
    
    public void LoginMedico(String passMedico)
    {     
        /* Un arreglo bidimensional [1] porque solo habrá un medico ( 1 fila ) con su 
           datos, [3] porque son 3 columas las que consultamos, Rut_Medico: Para el 
           usuario, Contraseña: Para contraseña & Estado_Medico ver si esta activo o inactivo */
        Object[][] data = new String[1][3];    
        try
        {
            PreparedStatement pre;
            pre = con.getConexion().prepareStatement
            (" SELECT rut_medico, contraseña, estado_medico" +
             " FROM Medicos " +
             " WHERE rut_medico = '"+ RUT_MEDICO +"'"
            );
            ResultSet res = pre.executeQuery();
        int i = 0;
        while(res.next())
        {
            String rut             =  res.getString("rut_medico");
            String password        =  res.getString("contraseña");
            String estado_medico   =  res.getString("estado_medico");
            data[i][0] = rut;
            data[i][1] = password;
            data[i][2] = estado_medico;
            i++;
        }
           /* Comprobamos si el medico está activo o inactivo en la base de datos ( 'A' ó 'I').
           También una condición que los datos puesto sean igual a la consulta en la database. */
        
        if(RUT_MEDICO.equals(data[0][0]) && passMedico.equals(data[0][1]) && data[0][2].equals("A")) 
        {
            /* Saltamos a la nueva ventana "PanelMedico" solo si cumple las condiciones*/
            LoginMedico l = new LoginMedico();
            l.setVisible(false);
            panelmedico p = new panelmedico();            
            p.setVisible(true);
            l.pack();   
            l.dispose();
            pre.close();
        }else if(RUT_MEDICO.equals("admin$301#") && passMedico.equals("$123456#"))
        {
            LoginMedico l = new LoginMedico();
            l.setVisible(false);
            DatosMedicos d = new DatosMedicos();             
            d.setVisible(true);
            l.pack();   
            l.dispose();
            pre.close();
        }
        else if(data[0][2].equals("I"))
        {
            JOptionPane.showMessageDialog(null, "Lo sentimos, usted se encuentra inactivo");
        }
        else if(passMedico.isEmpty() && RUT_MEDICO.isEmpty())
        {
            JOptionPane.showMessageDialog(null, "La contraseña o usuario son incorrecto");
        }
        else
        {
            JOptionPane.showMessageDialog(null, "No ha ingresado ningun dato");
        }
        }catch(SQLException e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
        catch(NullPointerException e)
        {
            JOptionPane.showMessageDialog(null, "Ingrese los datos correctamente");
        }          
    }
                                   
                     /*------------------- FIN METODO LOGIN MEDICO -------------------*/
    
    
    public void validacionDatos(){
        
        FichaPaciente f = new FichaPaciente();
        
        /*[1] Ya que queremos obtener solo 1 fila de datos, & [1] porque consultamos una sola columna ("Rut_Paciente"}*/
        
        Object[][] data = new String[1][1];
        
        try
        {
            PreparedStatement pre;
            pre = con.getConexion().prepareStatement
        (
                " SELECT distinct rut_paciente" +
                " FROM Consultas_medicas WHERE rut_paciente ='" + ConsultaMedica.txtRut.getText() + "' "
        );
            
            ResultSet res = pre.executeQuery();
            
        while(res.next())
        {
            String rut = res.getString("rut_paciente");
            data[0][0] = rut;
        }
        /* Comprobamos si el rut está correcto, si está procede si no, saltará un mensaje*/
        if(ConsultaMedica.txtRut.getText().equals(data[0][0]))
        {
            f.setVisible(true);   
            res.close();
        }
        else
        {
            JOptionPane.showMessageDialog(null,"El rut \"" + ConsultaMedica.txtRut.getText() + "\" no ha hecho una consulta medica.");
        }
        }
        catch(SQLException | ArrayIndexOutOfBoundsException e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
    }  
                       /*------------------- FIN METODO BUSCAR VALIDAR DATOS -------------------*/

    public void agregarConsulta(String rtp,String fch, String dg, String tr, String tp, String ob)
    {  
         try 
         {                
         
             PreparedStatement pre;
             pre= con.getConexion().prepareStatement
         (
                "insert into Consultas_medicas(rut_paciente,rut_medico,fecha_consulta,diagnostico,tratamiento,tipo_consulta,observaciones)"
              + "  values(?,?,?,?,?,?,?)"
         );       
             pre.setString(1, rtp);  
             pre.setString(2, RUT_MEDICO);
             pre.setString(3, fch);
             pre.setString(4, dg);
             pre.setString(5, tr);
             pre.setString(6, tp);
             pre.setString(7, ob);
             pre.execute();
             pre.close();            
            
         }
         catch(SQLException e)  
         {
             System.out.println(e);   
         }            
   }
     
     public void agregarDetalles(String codigo,String tipo,String sino)
     {  
         try 
         {                
         
             PreparedStatement pre;
             pre= con.getConexion().prepareStatement
         (
                "insert into Detalles_consultas(codigo_consulta,codigo_examen, solicitado) values(?,?,?)"
         );       
             pre.setString(1, codigo);
             pre.setString(2, tipo);
             pre.setString(3, sino);      
             pre.execute();
             pre.close();            
            
         }
         catch(SQLException e)  
         {
             System.out.println(e);   
         }            
   }
     
     public void codigo(){
        String codigo = "";
        try
        {
            PreparedStatement pre = con.getConexion().prepareStatement
        (
                "select MAX(codigo_consulta) as Codigo from Consultas_medicas"
        );
            ResultSet res = pre.executeQuery();
            res.next();
            codigo = res.getString("Codigo");
            res.close();
        }
        catch(SQLException e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
                String pb = null,pg = null,ph = null,po = null,ra = null,rc = null,rc2 = null,rt = null,ea = null,eb = null,ec = null,et = null;
        if(AgregarConsulta.PB.isSelected() == true){
            pb = "SI";                        
        }else if(AgregarConsulta.PB.isSelected() == false) {
            pb = "NO";
        }
        if(AgregarConsulta.PG.isSelected() == true){
            pg = "SI";
        }else if(AgregarConsulta.PG.isSelected() == false){
            pg = "NO";
        }
        if(AgregarConsulta.PH.isSelected() == true){
            ph = "SI";                        
        }else if(AgregarConsulta.PH.isSelected() == false){
            ph = "NO";
        }
        if(AgregarConsulta.PO.isSelected() == true){
            po = "SI";
        }else if(AgregarConsulta.PO.isSelected() == false){
            po = "NO";
        }
        if(AgregarConsulta.RA.isSelected() == true){
            ra = "SI";                        
        }else if(AgregarConsulta.RA.isSelected() == false){
            ra = "NO";
        }
        if(AgregarConsulta.RC.isSelected() == true){
            rc = "SI";
        }else if(AgregarConsulta.RC.isSelected() == false){
            rc = "NO";
        }
        if(AgregarConsulta.RC2.isSelected()){
            rc2 = "SI";                        
        }else if(AgregarConsulta.RC2.isSelected() == false){
            rc2 = "NO";
        }
        if(AgregarConsulta.RT.isSelected()){
            rt = "SI";
        }else if(AgregarConsulta.RT.isSelected() == false){
            rt = "NO";
        }
        if(AgregarConsulta.EA.isSelected()){
            ea = "SI";                        
        }else if(AgregarConsulta.EA.isSelected() == false){
            ea = "NO";
        }
        if(AgregarConsulta.EB.isSelected()){
            eb = "SI";
        }else if(AgregarConsulta.EB.isSelected() == false){
            eb = "NO";
        }
        if(AgregarConsulta.EC.isSelected()){
            ec = "SI";                        
        }else if(AgregarConsulta.EC.isSelected() == false){
            ec = "NO";
        }
        if(AgregarConsulta.ET.isSelected()){
            et = "SI";
        }else if(AgregarConsulta.ET.isSelected() == false){
            et = "NO";
        } 
        agregarDetalles(codigo,"1",  pb);
        agregarDetalles(codigo,"2",  po);       
        agregarDetalles(codigo,"3",  ph);
        agregarDetalles(codigo,"4",  pg);
        agregarDetalles(codigo,"5",  rt);
        agregarDetalles(codigo,"6",  rc);
        agregarDetalles(codigo,"7",  rc2);
        agregarDetalles(codigo,"8",  ra);
        agregarDetalles(codigo,"9",  ec);
        agregarDetalles(codigo,"10", et);
        agregarDetalles(codigo,"11", ea);
        agregarDetalles(codigo,"12", eb);
         
     }    
     
           /* METODO PARA CONSULTA MEDICA*/
     public Object [][] Historial()
    {       
        int nro = 0;
        try
        {
            PreparedStatement pre = con.getConexion().prepareStatement
        (
                "SELECT count(*) as Nro FROM Consultas_Medicas where rut_paciente = '"+panelmedico.txtrut.getText()+"'"
        );
            ResultSet res = pre.executeQuery();
            res.next();
            nro = res.getInt("Nro");
            res.close();
        }
        catch(SQLException e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
        /* [Nro] son la cantidad de datos que encontramos al hacer la consulta COUNT(*) & [3] son las 3 columnas que sacamos*/
        
        Object[][] datos = new String[nro][4];
        
        try{
            PreparedStatement pre;
            
            /* Un inner join para sacar datos de 3 tablas diferentes (Consultas_Medicas, Medicos & Metodos) */
            
            pre = con.getConexion().prepareStatement
            (
                    " SELECT Consultas_Medicas.rut_paciente,fecha_consulta, diagnostico, tratamiento FROM Consultas_medicas" +
                    " inner join Medicos On Consultas_medicas.rut_medico = Medicos.rut_medico" +
                    " inner join Pacientes On Consultas_medicas.rut_paciente = Pacientes.rut_paciente" +
                    " WHERE Pacientes.rut_paciente = '"+ panelmedico.txtrut.getText() +"'"
            );
            ResultSet res = pre.executeQuery();
        int i = 0;
        /* Obtenemos los resultados de la consulta hecha & las guardamos en un arreglo.*/
        while(res.next())
        {
            String rut              =   res.getString("rut_paciente");
            String fechaConsulta    =   res.getString("fecha_consulta");
            String diagnostico      =   res.getString("diagnostico");
            String tratamiento      =   res.getString("tratamiento");

            datos[i][0] = fechaConsulta;
            datos[i][1] = diagnostico;
            datos[i][2] = tratamiento;
            datos[i][3] = rut;
            i++;
        }    
        }
        catch(SQLException | ArrayIndexOutOfBoundsException e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
        return datos;
    }
    
    
    
    
}
